<script>
    // 1. 父类构造器
    function Father(name) {
        this.name = name;
        this.list = [1, 2, 3];
        this.say = function() {
            console.log('hello');
        }
    }
    // Child的实例无法继承Father原型上的属性或方法
    Father.prototype.aaa = function() {
        console.log('aaa');
    }

    // 2. 子类
    function Child(name) {
        // 3. 借用父类的构造器
        Father.call(this, name);
    }

    // 4. 创建实例1
    var child = new Child('小王');
    // 5. 创建实例2
    var child2 = new Child('小红');

    child2.list.push(4);
    console.log('child2', child2.list);
    console.log('child', child.list);

    // 6. 缺点展示: 方法会创建很多遍
    console.log(child.aaa); // undefined,方法只能定义在父类的构造函数里
    console.log(child.say === child2.say); // false, 所以每个实例都会创建一遍方法
</script>